//package com.bnq.control.common.utils;
//
//import android.app.Activity;
//import android.content.ClipData;
//import android.content.ContentUris;
//import android.content.Context;
//import android.content.Intent;
//import android.database.Cursor;
//import android.net.Uri;
//import android.os.Build;
//import android.os.Environment;
//import android.os.StatFs;
//import android.provider.DocumentsContract;
//import android.provider.MediaStore;
//import android.text.TextUtils;
//
//import java.io.File;
//import java.text.DecimalFormat;
//import java.text.Format;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.Date;
//import java.util.List;
//import java.util.Locale;
//import java.util.regex.Pattern;
//
//public class FileUtils {
//
//    public static int getResourceId(String exte) {
//        for (int i = 0; i < extensions.length; i++) {
//            String[] extension = extensions[i];
//            for (String a : extension) {
//                if (a.equalsIgnoreCase(exte))
//                    return extensions_imgId[i];
//            }
//        }
//        return R.drawable.unknown_file;
//    }
//
//    public static String[][] extensions = {
//            {"txt", "log", "xml", "html", "java", "swift", "c", "h", "cpp", "m", "plist", "storyboard"},
//            {"doc", "docx", "dotx"},
//            {"gif", "jpg", "png", "bmp", "jpeg", "tif", "ico"},
//            {"mp3", "wma", "ogg", "ape", "flac"},
//            {"pdf"},
//            {"xls", "xlsx"},
//            {"rar", "zip", "tgz", "tar", "jar", "7z", "bz2"},
//            {"rmvb", "asf", "avi", "divx", "dv", "flv", "gxf", "m1v", "m2v", "m2ts", "m4v", "mkv", "mov", "mp2", "mp4", "mpeg", "mpeg1", "mpeg2",
//                    "mpeg4", "mpg", "mts", "mxf", "ogg", "ogm", "ps", "ts", "vob", "wmv", "a52", "aac", "ac3", "dts", "m4a", "m4p", "mka", "mod", "mp1",
//                    "mp2", "rm", "tp"},
//            {"ppt", "pptx"}
//    };
//
//
//    public static int[] extensions_imgId = {R.drawable.file_notes, R.drawable.file_word,
//            R.drawable.file_img, R.drawable.file_music, R.drawable.file_pdf, R.drawable.file_excle,
//            R.drawable.file_compress_package, R.drawable.file_movie, R.drawable.file_ppt};
//
//    public static String APK_MIME = "application/vnd.android.package-archive";
//
//    public static String[][] MIME_MapTable = {
//            // {后缀名，MIME类型}
//            {".3gp", "video/3gpp"},
//            {".apk", APK_MIME},
//            {".asf", "video/x-ms-asf"},
//            {".avi", "video/x-msvideo"},
//            {".bin", "application/octet-stream"},
//            {".bmp", "image/bmp"},
//            {".c", "text/plain"},
//            {".class", "application/octet-stream"},
//            {".conf", "text/plain"},
//            {".cpp", "text/plain"},
//            {".doc", "application/msword"},
//            {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
//            {".xls", "application/vnd.ms-excel"},
//            {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
//            {".exe", "application/octet-stream"},
//            {".gif", "image/gif"},
//            {".gtar", "application/x-gtar"},
//            {".gz", "application/x-gzip"},
//            {".h", "text/plain"},
//            {".htm", "text/html"},
//            {".html", "text/html"},
//            {".jar", "application/java-archive"},
//            {".java", "text/plain"},
//            {".jpeg", "image/jpeg"},
//            {".jpg", "image/jpeg"},
//            {".js", "application/x-javascript"},
//            {".log", "text/plain"},
//            {".m3u", "audio/x-mpegurl"},
//            {".m4a", "audio/mp4a-latm"},
//            {".m4b", "audio/mp4a-latm"},
//            {".m4p", "audio/mp4a-latm"},
//            {".m4u", "video/vnd.mpegurl"},
//            {".m4v", "video/x-m4v"},
//            {".mov", "video/quicktime"},
//            {".mp2", "audio/x-mpeg"},
//            {".mp3", "audio/x-mpeg"},
//            {".mp4", "video/mp4"},
//            {".mkv", "video/x-matroska"},
//            {".mpc", "application/vnd.mpohun.certificate"},
//            {".mpe", "video/mpeg"},
//            {".mpeg", "video/mpeg"},
//            {".mpg", "video/mpeg"},
//            {".mpg4", "video/mp4"},
//            {".mpga", "audio/mpeg"},
//            {".msg", "application/vnd.ms-outlook"},
//            {".ogg", "audio/ogg"},
//            {".pdf", "application/pdf"},
//            {".png", "image/png"},
//            {".pps", "application/vnd.ms-powerpoint"},
//            {".ppt", "application/vnd.ms-powerpoint"},
//            {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
//            {".prop", "text/plain"},
//            {".rc", "text/plain"},
//            {".rmvb", "audio/x-pn-realaudio"},
//            {".rtf", "application/rtf"},
//            {".sh", "text/plain"},
//            {".tar", "application/x-tar"},
//            {".tgz", "application/x-compressed"},
//            {".txt", "text/plain"},
//            {".wav", "audio/x-wav"},
//            {".wma", "audio/x-ms-wma"},
//            {".wmv", "audio/x-ms-wmv"},
//            {".wps", "application/vnd.ms-works"},
//            {".xml", "text/plain"},
//            {".z", "application/x-compress"},
//            {".zip", "application/x-zip-compressed"},
//            {"", "*/*"}};
//
//    public static String getPath(final Context context, final Uri uri) {
//        final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
//        // DocumentProvider
//        if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
//            // ExternalStorageProvider
//            if (isExternalStorageDocument(uri)) {
//                final String docId = DocumentsContract.getDocumentId(uri);
//                final String[] split = docId.split(":");
//                final String type = split[0];
//                if ("primary".equalsIgnoreCase(type)) {
//                    return Environment.getExternalStorageDirectory() + "/" + split[1];
//                }
//            }
//            // DownloadsProvider
//            else if (isDownloadsDocument(uri)) {
//                final String id = DocumentsContract.getDocumentId(uri);
//                final Uri contentUri;
//                try {
//                    if (id.startsWith("raw:")) return id.replaceFirst("raw:", "");
//                    contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.parseLong(id));
//                    return getDataColumn(context, contentUri, null, null);
//                } catch (NumberFormatException e) {
//                    e.printStackTrace();
//                }
//
//            }
//            // MediaProvider
//            else if (isMediaDocument(uri)) {
//                final String docId = DocumentsContract.getDocumentId(uri);
//                final String[] split = docId.split(":");
//                final String type = split[0];
//
//                Uri contentUri = null;
//                if ("image".equals(type)) {
//                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
//                } else if ("video".equals(type)) {
//                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
//                } else if ("audio".equals(type)) {
//                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//                }
//
//                final String selection = "_id=?";
//                final String[] selectionArgs = new String[]{split[1]};
//
//                return getDataColumn(context, contentUri, selection, selectionArgs);
//            }
//        } else if ("content".equalsIgnoreCase(uri.getScheme())) {
//            return getDataColumn(context, uri, null, null);
//        } else if ("file".equalsIgnoreCase(uri.getScheme())) {
//            return uri.getPath();
//        }
//        return null;
//    }
//
//
//    private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
//        final String column = "_data";
//        final String[] projection = {column};
//        try (Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
//                null)) {
//            if (cursor != null && cursor.moveToFirst()) {
//                final int column_index = cursor.getColumnIndexOrThrow(column);
//                return cursor.getString(column_index);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    private static boolean isExternalStorageDocument(Uri uri) {
//        return "com.android.externalstorage.documents".equals(uri.getAuthority());
//    }
//
//    private static boolean isDownloadsDocument(Uri uri) {
//        return "com.android.providers.downloads.documents".equals(uri.getAuthority());
//    }
//
//    private static boolean isMediaDocument(Uri uri) {
//        return "com.android.providers.media.documents".equals(uri.getAuthority());
//    }
//
//    /**
//     * 转换文件大小
//     *
//     * @param size
//     * @return
//     */
//    public static String formatFileSize(long size) {// 转换文件大小
//        DecimalFormat df = new DecimalFormat("#.00");
//        String fileSizeString;
//        if (size == 0) {
//            fileSizeString = "0B";
//        } else if (size < 1024) {
//            fileSizeString = df.format((double) size) + "B";
//        } else if (size < 1048576) {
//            fileSizeString = df.format((double) size / 1024) + "K";
//        } else if (size < 1073741824) {
//            fileSizeString = df.format((double) size / (1024 * 1024)) + "M";
//        } else {
//            fileSizeString = df.format((double) size / (1024 * 1024 * 1024)) + "G";
//        }
//        return fileSizeString;
//    }
//
//    /**
//     * 根据文件后缀名获得对应的MIME类型。
//     *
//     * @param fileName 文件名
//     */
//    public static String getFileMineType(String fileName) {
//        String type = "*/*";
//        // 获取后缀名前的分隔符"."在fName中的位置。
//        int dotIndex = fileName.lastIndexOf(".");
//        if (dotIndex < 0) {
//            return type;
//        }
//        // 获取文件的后缀名
//        String end = fileName.substring(dotIndex).toLowerCase();
//        if (TextUtils.isEmpty(end)) return type;
//        // 在MIME和文件类型的匹配表中找到对应的MIME类型。
//        for (int i = 0; i < FileUtils.MIME_MapTable.length; i++) {
//            if (end.equals(FileUtils.MIME_MapTable[i][0])) {
//                type = FileUtils.MIME_MapTable[i][1];
//                break;
//            }
//        }
//        return type;
//    }
//
//    /**
//     * 按文件名排序
//     */
//    public static void sortByFileName(List<FileEnum> files) {
//        List<FileEnum> fileList = new ArrayList<>();
//        List<FileEnum> directList = new ArrayList<>();
//        if (files != null) {
//            for (int i = 0; i < files.size(); i++) {
//                FileEnum fileEnum = files.get(i);
//                if (fileEnum.getIsDir()) {
//                    directList.add(fileEnum);
//                } else {
//                    fileList.add(fileEnum);
//                }
//            }
//        }
//
//        Collections.sort(directList, (file1, file2) -> {
//            String key1 = file1.getName();
//            String key2 = file2.getName();
//            return key1.compareToIgnoreCase(key2);
//        });
//        Collections.sort(fileList, (file1, file2) -> {
//            String key1 = file1.getName();
//            String key2 = file2.getName();
//            return key1.compareToIgnoreCase(key2);
//        });
//        if (null != files) {
//            files.clear();
//            files.addAll(directList);
//            files.addAll(fileList);
//        }
//    }
//
//
//    /**
//     * 按修改时间排序
//     */
//    public static void sortByLastModified(List<FileEnum> files) {
//        List<FileEnum> fileList = new ArrayList<>();
//        List<FileEnum> directList = new ArrayList<>();
//        if (files != null) {
//            for (int i = 0; i < files.size(); i++) {
//                FileEnum fileEnum = files.get(i);
//                if (fileEnum.getIsDir()) {
//                    directList.add(fileEnum);
//                } else {
//                    fileList.add(fileEnum);
//                }
//            }
//        }
//
//        Collections.sort(directList, (file1, file2) -> {
//            String key1 = getLastModified(file1.getLastModifyTime());
//            String key2 = getLastModified(file2.getLastModifyTime());
//            return key2.compareToIgnoreCase(key1);
//        });
//
//        Collections.sort(fileList, (file1, file2) -> {
//            String key1 = getLastModified(file1.getLastModifyTime());
//            String key2 = getLastModified(file2.getLastModifyTime());
//            return key2.compareToIgnoreCase(key1);
//        });
//        if (null != files) {
//            files.clear();
//            files.addAll(directList);
//            files.addAll(fileList);
//        }
//    }
//
//    /**
//     * 获取文件最后修改时间
//     *
//     * @param time
//     * @return
//     */
//    public static String getLastModified(long time) {
//        Date d = new Date(time);// hh:mm:ss
//        Format simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
//        return simpleFormat.format(d);
//    }
//
//
//    /**
//     * 获取文件最后修改时间
//     *
//     * @return 格式化后的字符串
//     */
//    public static String getLastModifiedFormat(long time) {
//        Date d = new Date(time);
//        Format simpleFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.getDefault());
//        return simpleFormat.format(d);
//    }
//
//    /**
//     * 获取文件最后修改时间
//     *
//     * @param file 文件
//     * @return 返回该文件格式化之后的最后修改时间
//     */
//    public static String getLastModifiedFormat(File file) {
//        long time = file.lastModified();
//        Date d = new Date(time);// hh:mm:ss
//        Format simpleFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.getDefault());
//        return simpleFormat.format(d);
//    }
//
//    /**
//     * SDCARD是否存在
//     */
//    public static boolean externalMemoryAvailable() {
//        return Environment.getExternalStorageState().equals(
//                Environment.MEDIA_MOUNTED);
//    }
//
//    private static final Pattern pattern = Pattern.compile("[^A_Za_z]:",
//            Pattern.UNIX_LINES);
//
//    public static boolean isDriveLetter(String path) {
//        return path.length() < 3 || pattern.matcher(path).matches();
//    }
//
//    /**
//     * 获取SDCARD剩余存储空间
//     *
//     * @return
//     */
//    public static long getAvailableExternalMemorySize() {
//        if (externalMemoryAvailable()) {
//            File path = Environment.getExternalStorageDirectory();
//            StatFs stat = new StatFs(path.getPath());
//            long blockSize = stat.getBlockSize();
//            long availableBlocks = stat.getAvailableBlocks();
//            return availableBlocks * blockSize;
//        } else {
//            return -1;
//        }
//    }
//
//
//    /**
//     * 通过不同type打开对应SAF存储访问框架
//     * image/* 图片
//     * video/* 视频
//     * audio/* 音频
//     */
//    public static void openSAF(Activity activity, String type, int requestCode) {
//        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
//        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false); //设置多选
//        intent.addCategory(Intent.CATEGORY_OPENABLE);
//        intent.setType(type);
//        if (null != activity) activity.startActivityForResult(intent, requestCode);
//    }
//
//    /**
//     * 获取父目录
//     *
//     * @param isWindows 是否是windows
//     * @param path      文件path
//     * @return
//     */
//    public static String getParentPath(String path) {
//        if (TextUtils.isEmpty(path)) return "";
//        int start = 0;
//        int end;
//
//        if (path.contains("/")) {
//            end = path.lastIndexOf('/');
//        } else {
//            end = path.lastIndexOf('\\');
//        }
//
//        end = Math.max(end, 0);
//        String returnPath = path.substring(start, end);
//        if (TextUtils.isEmpty(returnPath)) {
//            returnPath = File.separator;
//        }
//        return returnPath;
//    }
//
//    /**
//     * 调用系统的Intent, 拉起可以打开path指定文件的程序
//     *
//     * @param activity
//     * @param path     文件路径
//     */
//    public static void openFile(Activity activity, String path) {
//        openFile(activity, new File(path));
//    }
//
//    /**
//     * 调用系统的Intent, 拉起可以打开path指定文件的程序
//     *
//     * @param activity
//     * @param file     文件路径
//     */
//    public static void openFile(Activity activity, File file) {
//        try {
//            LogUtil.i("openFile", ">>>>>> open >>>>>" + file.getAbsolutePath());
//            Intent intent = new Intent();
//            // 设置intent的Action属性
//            intent.setAction(Intent.ACTION_VIEW);
//            // 获取文件file的MIME类型
//            String type = getMIMEType(file);
//            if (FileUtils.APK_MIME.equals(type)) {
//                PackageUtils.installApk(activity, file.getAbsolutePath());
//            } else {
//                Uri uri = PackageUtils.getFileUri(file, activity);
//                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//                    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//                    //重点:针对7.0以上的操作
//                    intent.setClipData(ClipData.newRawUri(MediaStore.EXTRA_OUTPUT, uri));
//                }
//                // 设置intent的data和Type属性。
//                intent.setDataAndType(uri, type);
//                // 跳转
//                activity.startActivity(intent);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//
//    /**
//     * 根据文件后缀名获得对应的MIME类型。
//     *
//     * @param file
//     */
//    public static String getMIMEType(File file) {
//        String type = "*/*";
//        String fName = file.getName();
//        // 获取后缀名前的分隔符"."在fName中的位置。
//        int dotIndex = fName.lastIndexOf(".");
//        if (dotIndex < 0) {
//            return type;
//        }
//        /* 获取文件的后缀名 */
//        String end = fName.substring(dotIndex).toLowerCase();
//        if (TextUtils.isEmpty(end)) return type;
//        // 在MIME和文件类型的匹配表中找到对应的MIME类型。
//        for (int i = 0; i < FileUtils.MIME_MapTable.length; i++) {
//            if (end.equals(FileUtils.MIME_MapTable[i][0])) {
//                type = FileUtils.MIME_MapTable[i][1];
//                break;
//            }
//        }
//        return type;
//    }
//}
